import cv2

from ultralytics import YOLO

# 加载YOLOv8模型
model = YOLO("yolov8n.pt")

# 打开摄像头
cap = cv2.VideoCapture(0)

# 遍历视频帧
while cap.isOpened():
    # 从视频中读取一帧
    success, frame = cap.read()

    if success:
        # 在帧上运行YOLOv8推理
        results = model(frame)

        # 在帧上可视化推理结果
        annotated_frame = results[0].plot()

        # 显示标注后的帧
        cv2.imshow("YOLOv8推理结果", annotated_frame)

        # 如果按下'q'键则退出循环
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # 如果视频播放完毕，则退出循环
        break

# 释放视频捕获对象并关闭显示窗口
cap.release()
cv2.destroyAllWindows()
"""
yolo_pre_stream.py
此脚本是一个独立的工具，用于通过摄像头测试YOLOv8目标检测功能，主要用于原型开发或调试。

用途：从摄像头捕获视频流，运行YOLOv8模型进行推理，并在帧上显示检测结果（包括边界框和标签）。
核心组件：

加载YOLO模型：使用ultralytics库加载预训练的YOLOv8模型（yolov8n.pt）。
摄像头捕获：通过OpenCV的cv2.VideoCapture(0)从默认摄像头获取视频帧。
推理与可视化：对每一帧执行以下操作：

运行YOLOv8推理（model(frame)）。
使用results[0].plot()在帧上绘制检测结果（边界框和标签）。
通过cv2.imshow显示带注释的帧。


退出条件：用户按下‘q’键或视频捕获失败时退出循环。
清理：释放摄像头资源（cap.release()）并关闭所有OpenCV窗口（cv2.destroyAllWindows()）。


用途：此脚本主要用于单独测试YOLO模型在实时视频流上的效果，与主分拣系统分开。
"""